Virtualization refers to the hiding of physical characteristics of a computing platform from users and instead showing the users another computing platform that is abstracted from the physical characteristics. Generally, platform virtualization is performed on a given hardware platform by host software, which is often referred to as a root virtual machine. This root virtual machine can create a simulated computer environment for guest programs, which are often referred to as child virtual machines. These child virtual machines may be applications, complete operating systems, etc.
Virtualization is quickly emerging as a critical technology for enterprise and cloud computing systems. Deploying workloads into virtual machines provides multiple benefits including fault isolation between consolidated workloads and improved manageability through features such as live migration.
Generally, it is desirable to consolidate numerous virtual machines onto physical servers for improved resource utilization and power efficiency. To accomplish consolidation of virtual machines onto a server, for example, memory and processing capabilities must be allocated amongst virtual machines on the server. With respect to memory management, one method for allocating memory to virtual machines is to provide static memory allotments to each virtual machine, where memory is allocated to each virtual machine conservatively based upon worst case usage of memory of the virtual machines. It can be ascertained, however, that this can severely limit the ability to consolidate virtual machines on the server. For example, resource requirements of virtual machines may fluctuate significantly over time.
Another mechanism for allocating memory is referred to as memory balancing. In memory balancing, a dynamic memory manager is utilized to cause memory to be dynamically allocated between virtual machines, such that when one virtual machine is experiencing low resource requirements, another can be provisioned with resources that meet high demand phases. Memory balancing can allow for improved consolidation of virtual machines by removing the need for conservatively allocating memory based on worst case scenarios. In conventional memory balancing techniques, however, second level paging is sometimes required when memory is overcommitted to virtual machines. That is, the virtual machines must write data to disk rather than writing data to memory, which may cause virtual machines to generate numerous faults, thereby negatively affecting performance of the server.